# from zhipuai import ZhipuAI
# import json
# import requests
# import re

# client = ZhipuAI(api_key="e01b3f7ea25754c994ab325c5d096be6.U2t6lVQoH1DSl0n4")

# # 定义API信息
# api_info = {
#     "获取法人代表": {'route': '/law_api/api', 'param': 'company_name'},
#     "获取公司全部信息": {'route': '/law_api/get_company_info', 'param': 'company_name'},
#     "根据公司注册信息某个字段是某个值来查询具体的公司名称": {'route': '/law_api/search_company_name_by_register', 'param': ['key', 'value']},
#     "根据公司基本信息某个字段是某个值来查询具体的公司名称": {'route': '/law_api/search_company_name_by_info', 'param': ['key', 'value']},
#     "根据公司名称获得该公司所有注册信息": {'route': '/law_api/get_company_register', 'param': 'company_name'},
#     "根据子公司名称获得该公司所有关联子公司信息": {'route': '/law_api/get_sub_company_info', 'param': 'company_name'},
#     "根据关联子公司信息某个字段是某个值来查询具体的公司名称": {'route': '/law_api/search_company_name_by_sub_info', 'param': ['key', 'value']},
#     "根据案号获得该案所有基本信息": {'route': '/law_api/get_legal_document', 'param': 'case_num'},
# }

# # 定义问题列表
# question_contents = []

# # 获取json文件内容
# file_path = "submit.json"
# # 先往question_contents里面填问题内容
# with open(file_path, 'r', encoding='utf-8') as file:
#     data = json.load(file)

# # 提取所有的question值
# question_contents = [item['question'] for item in data]


# def extract_data(text):
#     # 正则表达式匹配JSON格式的数据或字符串"nu"
#     pattern = r'\{[^{}]*\}|nu'
#     match = re.search(pattern, text)
    
#     if match:
#         # 如果匹配成功，返回匹配的数据
#         return match.group()
#     else:
#         # 如果没有匹配的数据，返回None
#         return None
# # 定义提取API和参数的函数
# def get_api_and_params(question_content):
#     # 使用模型API理解和处理问题
#     messages = [
#         {
#             "role": "user",
#             "content": f"前提：不要回复我要求之外的任何文字！我只要json格式的数据。我有八个基础api如下{api_info},请分析以下问题，并告诉我需要调用哪个API以及提取哪些参数，要求这些都要从原问题中获取,比如说原问题中出现注册号，你就需要在提取的参数一栏中写注册号，而不是写register_num除此之外，问题描述即为问题原文：{question_content},不要回复多余的东西！严格按照以下格式回复我，问题描述，问题需要调用api的路由，提取的参数，参数值，这些全部用json格式返回给我，并且请注意,不需要以markdown的形式写，并且不需要写```json和```；提取的参数不要有方括号也不要有引号，参数值也一样。请严格遵守。如果遇到这样的问题：请查询景津装备股份有限公司所属的行业类别，并告知在该行业分类下共有多少家公司？需要组合使用api的复杂问题就统一返回字符串nu，除了这个nu之外其他什么都不要说。如果有两个json，请把他们不相同的部分合并用逗号隔开再回复。"
#         }
#     ]
#     response = client.chat.completions.create(
#         model="glm-4",  # 填写需要调用的模型名称
#         messages=messages,
#         tool_choice="auto",
#     )
#     reply = response.choices[0].message.content
#     # print("------")
#     # print(reply)
#     print("------")
#     clean_reply = extract_data(reply)
#     print(clean_reply)
#     print("------")
#     if(clean_reply==None):
#         return None
#     # 将JSON字符串解析为字典
#     reply_json = json.loads(clean_reply)

#     # 提取四个字段
#     if(clean_reply!="nu"):
#         question_description = reply_json["问题描述"]
#         api_route = reply_json["问题需要调用api的路由"]
#         extracted_parameter = reply_json["提取的参数"]
#         parameter_value = reply_json["参数值"]
#         # 打印提取的字段
#         # print(f"问题描述: {question_description}")
#         # print(f"API路由: {api_route}")
#         # print(f"提取的参数: {extracted_parameter}")
#         # print(f"参数值: {parameter_value}")

#         return question_description,api_route,extracted_parameter,parameter_value
#     else:
#         return None,None,None,None

# def writefile(answer,question_de):
#     # 假设您的 JSON 文件名为 data.json
#     filename = 'submit.json'

#     # 读取 JSON 文件
#     with open(filename, 'r', encoding='utf-8') as file:
#         data = json.load(file)

#     # 更新答案
#     updated_any = False
    
#     updated = False
#     for item in data:
#         if item['question'] == question_de:
#             # 找到匹配的问题，更新答案
#             item['answer'] = answer
#             updated = True
#             updated_any = True
#             break  # 匹配成功，跳出内层循环
#     if not updated:
#         print(f"没有找到与 '{question_de}' 匹配的问题。")

#     # 如果有任何更新，将更新后的数据写回 JSON 文件
#     if updated_any:
#         with open(filename, 'w', encoding='utf-8') as file:
#             json.dump(data, file, ensure_ascii=False, indent=4)

#     print("答案已更新到 JSON 文件。" if updated_any else "没有问题匹配，JSON 文件未更新。")

# # 测试函数
# for qc in question_contents:
#     qd,ar,ep,pv = get_api_and_params(qc)
#     if(qd==None):
#         continue
#     # print("------")
#     domain = "comm.chatglm.cn"

#     url = f"https://{domain}{ar}"
#     # print("url为"+url)
#     data = {
#             f"{ep}": f"{pv}"
#         }
#     # print(f"data为{data}")
#     headers = {
#         'Content-Type': 'application/json',
#         'Authorization': 'Bearer DE32EB46D23350E0B75B3702C8D5DC036F8CE32DC73C919D'
#     }
    
#     # 提取参数和参数值
#     parameters = ep.split(',')
#     parameter_values = pv.split(',')
    
#     # 确保 parameters 和 parameter_values 的长度相同
#     if len(parameters) == len(parameter_values):
#         # 创建一个字典来存储参数和值
#         data = {f"{ep}": f"{pv}" for ep, pv in zip(parameters, parameter_values)}
#     else:
#         print("参数和参数值的数量不匹配，请检查输入数据。")
#     rsp = requests.post(url, json=data, headers=headers)
#     # print(rsp.json())

# # -------------------------------------------------------------------------
#     # 如果模型回复model_reply为空，那么将url即103行的ar修改为/law_api/get_company_register
#     if rsp.json() == []:
#         url = f"https://comm.chatglm.cn/law_api/get_company_register"

#         data = {
#                 f"{ep}": f"{pv}"
#             }

#         headers = {
#             'Content-Type': 'application/json',
#             'Authorization': 'Bearer DE32EB46D23350E0B75B3702C8D5DC036F8CE32DC73C919D'
#         }
        
#         # 提取参数和参数值
#         parameters = ep.split(',')
#         parameter_values = pv.split(',')
        
#         # 确保 parameters 和 parameter_values 的长度相同
#         if len(parameters) == len(parameter_values):
#             # 创建一个字典来存储参数和值
#             data = {f"{ep}": f"{pv}" for ep, pv in zip(parameters, parameter_values)}
#         else:
#             print("参数和参数值的数量不匹配，请检查输入数据。")
#         rsp = requests.post(url, json=data, headers=headers)
#         # print(rsp.json())

#         # 构造消息，将问题和答案作为上下文传递给模型
#         messages = [
#             {
#                 "role": "user",
#                 "content": f"这个是问题{qd}，而这个是可能包含问题答案的信息{rsp.json()}，请在信息中找寻总结答案并重新组织一下语言，然后回复给我，除了我要求的回复内容外，其他的话都不要说，如果答案为空，那就说这个问题没有答案。"
#             }
#         ]
#         # 使用模型生成回答
#         response = client.chat.completions.create(
#             model="glm-4",  # 填写需要调用的模型名称
#             messages=messages,
#             tool_choice="auto"
#         )
#         fin_model_reply = response.choices[0].message.content
#         print("***************")
#         print(f"原始数据为：{rsp.json()}")
#         print(fin_model_reply)
#         print("***************")
#         writefile(fin_model_reply,qd)
#     else:
#         url = f"https://comm.chatglm.cn{ar}"
#         print(f"ar为：{ar},url为："+url)
#         data = {
#                 f"{ep}": f"{pv}"
#             }
#         print(data)
#         headers = {
#             'Content-Type': 'application/json',
#             'Authorization': 'Bearer DE32EB46D23350E0B75B3702C8D5DC036F8CE32DC73C919D'
#         }
        
#         # 提取参数和参数值
#         parameters = ep.split(',')
#         parameter_values = pv.split(',')
        
#         # 确保 parameters 和 parameter_values 的长度相同
#         if len(parameters) == len(parameter_values):
#             # 创建一个字典来存储参数和值
#             data = {f"{ep}": f"{pv}" for ep, pv in zip(parameters, parameter_values)}
#         else:
#             print("参数和参数值的数量不匹配，请检查输入数据。")

#         rsp = requests.post(url, json=data, headers=headers)
#         print(rsp.json())

#         # 构造消息，将问题和答案作为上下文传递给模型
#         messages = [
#             {
#                 "role": "user",
#                 "content": f"这个是问题{qd}，而这个是可能包含问题答案的信息{rsp.json()}，请在信息中找寻总结答案并重新组织一下语言，然后回复给我，除了我要求的回复内容外，其他的话都不要说，如果答案为空，那就说这个问题没有答案。"
#             }
#         ]
#         # 使用模型生成回答
#         response = client.chat.completions.create(
#             model="glm-4",  # 填写需要调用的模型名称
#             messages=messages,
#             tool_choice="auto"
#         )
#         # 获取模型的回答
#         fin_model_reply = response.choices[0].message.content
#         print("***************")
#         print(fin_model_reply)
#         print("***************")
#         writefile(fin_model_reply,qd)
